package com.zofer.study.array;

/**
 * 题目：数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
 * 由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。如果不存在则输出0。
 */
public class MoreThanHalfNum {

    public int MoreThanHalfNum_Solution(int [] array) {
        if(array.length == 0){
            return 0;
        }

        int times = 1;
        // 用于记录出现次数大于数组一半的数
        int result = array[0];
        for(int i = 1;i < array.length;i++){
            if(times == 0){
                // 重新记录一个数，假设它是出现次数大于数组一半的
                result = array[i];
                times = 1;
            }else if(result == array[i]){
                times++;
            }else{
                times--;
            }
        }

        times = 0;
        for(int j = 0;j < array.length;j++){
            if(array[j] == result){
                times++;
            }
        }

        return times > array.length/2 ? result : 0;
    }
}
